{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "      <td>331</td>\n",
       "      <td>654</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2011-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "      <td>131</td>\n",
       "      <td>670</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2011-01-03</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "      <td>120</td>\n",
       "      <td>1229</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2011-01-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "      <td>108</td>\n",
       "      <td>1454</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2011-01-05</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>82</td>\n",
       "      <td>1518</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant      dteday  season  yr  mnth  holiday  weekday  workingday  \\\n",
       "0        1  2011-01-01       1   0     1        0        6           0   \n",
       "1        2  2011-01-02       1   0     1        0        0           0   \n",
       "2        3  2011-01-03       1   0     1        0        1           1   \n",
       "3        4  2011-01-04       1   0     1        0        2           1   \n",
       "4        5  2011-01-05       1   0     1        0        3           1   \n",
       "\n",
       "   weathersit      temp     atemp       hum  windspeed  casual  registered  \\\n",
       "0           2  0.344167  0.363625  0.805833   0.160446     331         654   \n",
       "1           2  0.363478  0.353739  0.696087   0.248539     131         670   \n",
       "2           1  0.196364  0.189405  0.437273   0.248309     120        1229   \n",
       "3           1  0.200000  0.212122  0.590435   0.160296     108        1454   \n",
       "4           1  0.226957  0.229270  0.436957   0.186900      82        1518   \n",
       "\n",
       "    cnt  \n",
       "0   985  \n",
       "1   801  \n",
       "2  1349  \n",
       "3  1562  \n",
       "4  1600  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "from sklearn.metrics import r2_score\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "data = pd.read_csv(\"day.csv\", skipinitialspace=True)\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['instant', 'dteday', 'season', 'yr', 'mnth', 'holiday', 'weekday',\n",
      "       'workingday', 'weathersit', 'temp', 'atemp', 'hum', 'windspeed',\n",
      "       'casual', 'registered', 'cnt'],\n",
      "      dtype='object')\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<seaborn.axisgrid.PairGrid at 0x7f272e614dd8>"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f272e614898>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(data.columns)\n",
    "\n",
    "data = data.drop(columns=['dteday','instant','temp','season'])#'casual', 'registered',\n",
    "#data.head()\n",
    "\n",
    "sns.pairplot(data, size=6,x_vars='mnth', y_vars='cnt')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "#下面是分割训练数据与测试数据\n",
    "#data[data['weekday'] == 0]\n",
    "#X_train = X[X['dteday'] < '2012-01-01']\n",
    "#预测目标\n",
    "y = data['cnt'].values\n",
    "X = data.drop('cnt',axis = 1)\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.2)\n",
    "#train = data[data['yr'] == 0]\n",
    "#X_train = train.drop(columns=['yr', 'cnt'])\n",
    "#y_train = train['cnt']\n",
    "columns = X_train.columns\n",
    "\n",
    "test = data[data['yr'] == 1]\n",
    "X_test = test.drop(columns=[ 'cnt'])\n",
    "y_test = test['cnt']\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/lyp/.local/lib/python3.6/site-packages/sklearn/utils/validation.py:475: DataConversionWarning: Data with input dtype int64 was converted to float64 by MinMaxScaler.\n",
      "  warnings.warn(msg, DataConversionWarning)\n",
      "/home/lyp/.local/lib/python3.6/site-packages/ipykernel_launcher.py:14: FutureWarning: reshape is deprecated and will raise in a subsequent release. Please use .values.reshape(...) instead\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "#数据归一化,先给 X_train归一化\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "ms_X = MinMaxScaler()\n",
    "ms_y = MinMaxScaler()\n",
    "\n",
    "\n",
    "X_train = ms_X.fit_transform(X_train)\n",
    "X_test = ms_X.fit_transform(X_test)\n",
    "\n",
    "\n",
    "#y值归一化\n",
    "y_train = ms_y.fit_transform(y_train.reshape(-1, 1))\n",
    "y_test = ms_y.transform(y_test.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>coef</th>\n",
       "      <th>columns</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>[0.7968246663598708]</td>\n",
       "      <td>registered</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>[0.37747353888633217]</td>\n",
       "      <td>casual</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>[2.983724378680108e-16]</td>\n",
       "      <td>atemp</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>[2.185751579730777e-16]</td>\n",
       "      <td>workingday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>[1.5612511283791264e-16]</td>\n",
       "      <td>holiday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>[1.471167634179634e-16]</td>\n",
       "      <td>yr</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>[4.163336342344337e-17]</td>\n",
       "      <td>hum</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>[0.0]</td>\n",
       "      <td>mnth</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>[0.0]</td>\n",
       "      <td>weekday</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>[-1.3877787807814457e-17]</td>\n",
       "      <td>weathersit</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>[-1.491862189340054e-16]</td>\n",
       "      <td>windspeed</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                         coef     columns\n",
       "10       [0.7968246663598708]  registered\n",
       "9       [0.37747353888633217]      casual\n",
       "6     [2.983724378680108e-16]       atemp\n",
       "4     [2.185751579730777e-16]  workingday\n",
       "2    [1.5612511283791264e-16]     holiday\n",
       "0     [1.471167634179634e-16]          yr\n",
       "7     [4.163336342344337e-17]         hum\n",
       "1                       [0.0]        mnth\n",
       "3                       [0.0]     weekday\n",
       "5   [-1.3877787807814457e-17]  weathersit\n",
       "8    [-1.491862189340054e-16]   windspeed"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 线性回归\n",
    "#class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "# 使用默认配置初始化\n",
    "lr = LinearRegression()\n",
    "\n",
    "# 训练模型参数\n",
    "lr.fit(X_train, y_train)\n",
    "\n",
    "# 预测\n",
    "y_test_pred_lr = lr.predict(X_test)\n",
    "y_train_pred_lr = lr.predict(X_train)\n",
    "\n",
    "\n",
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(columns), \"coef\":list((lr.coef_.T))})\n",
    "fs.sort_values(by=['coef'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LinearRegression on test is 0.9993002379788954\n",
      "The r2 score of LinearRegression on train is 1.0\n"
     ]
    }
   ],
   "source": [
    "# 使用r2_score评价模型在测试集和训练集上的性能，并输出评估结果\n",
    "#测试集\n",
    "print( 'The r2 score of LinearRegression on test is', r2_score(y_test, y_test_pred_lr))\n",
    "#训练集\n",
    "print('The r2 score of LinearRegression on train is', r2_score(y_train, y_train_pred_lr))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
